package org.huangrui.spark.java.core.rdd.operate;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;
import java.util.List;

/**
 * @Author hr
 * @Create 2024-10-16 17:29
 */
public class Spark02_Operate_Transform_Map_1 {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("spark");
        JavaSparkContext jsc = new JavaSparkContext(conf);

        final List<Integer> nums = Arrays.asList(1, 2, 3, 4);

        final JavaRDD<Integer> rdd = jsc.parallelize(nums, 2);

        // TODO Java1.8 来自于Scala语言，由马丁引入，能省侧省
/*
        JavaRDD<Integer> newRdd = rdd.map(new Function<Integer, Integer>() {
            @Override
            public Integer call(Integer in) throws Exception {
                return in * 2;
            }
        });
*/
        // TODO 如果]ava中接口采用注解@FunctionalInterface声明，那么接口的使用就可以采用JDK提供的函数式编程的语法实现 (λ表达式)
        // 1.return 可以省略 :map方法就需要返回值，所以不屑return
        // 2.分号 可以省略 :可以采用换行的方式表示代码逻辑
        // 3.大括号 可以省略 :如果逻辑代码只有一行
        // 4.小括号 可以省略:参数列表中的参数只有一个
        // 5.参数和箭头 可以省略 :参数在逻辑中只使用了一次(需要有对象来实现功能)
        // JavaRDD<Integer> newRdd = rdd.map(in -> in * 2);
        JavaRDD<Integer> newRdd = rdd.map(NumberTest::mul2);
        newRdd.foreach(System.out::println);
        System.out.println("*************************************");
        System.out.println(nums);

        jsc.close();
    }
}
class NumberTest{
    public static Integer mul2(Integer in){
        return in * 2;
    }
}